/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2017.10.25                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_bdry_HeatSourceBoundaryCondition_h
#define FreeMAPs_include_COMMON_bdry_HeatSourceBoundaryCondition_h

#include "FreeMAPsConfig.h"

//COMMON headers
#include "COMMON/bdry/IrregularBoundaryConditionStrategy.h"



namespace gFreeMAPs
{
class ParaFluxBean;
}

namespace FreeMAPs
{

//forward declaration
class Function;

class HeatSourceBoundaryCondition : public IrregularBoundaryConditionStrategy
{
public:

    HeatSourceBoundaryCondition (
        const std::string& parent_name,
        const std::string& bc_name,
        const PDEEquationEnsembleStrategy* equation_ensemble);

    virtual
    ~HeatSourceBoundaryCondition ();

public:

    virtual inline BoundaryConditionType
    get_type() const;

    virtual inline bool
    require_set_variable() const;

public:

    virtual void
    get_info_for_derived_object_from_input (
        const InputDatabase* db);

    virtual std::string
    get_info_from_derived_object() const;


public:
    virtual void
    set_para_source(
            gFreeMAPs::ParaFluxBean* para_source);

    virtual gFreeMAPs::ParaFluxBean*
    get_para_source();


private:

    typedef IrregularBoundaryConditionStrategy Parent;

    //Function* d_para_source;
    //para_source
    gFreeMAPs::ParaFluxBean* d_para_flux;

private:

    DISALLOW_COPY_AND_ASSIGN (HeatSourceBoundaryCondition);
};

}

#include "COMMON/bdry/HeatSourceBoundaryCondition.inl"

#endif
